package com.wang.tool.proxy;


import com.alibaba.fastjson.JSONObject;

/**
 * 切面
 *
 * @Author wangshaopeng
 * @Date 2020/8/5
 */
public interface Cut {

    /**
     * 执行逻辑
     *
     * @param chain  执行链 非空
     * @param param  入参
     * @param runCtx 执行环境 非空
     * @return 返回值
     */
    Object invoke(FunctionProxy<Object, Object>.InvokeChain chain, Object param, JSONObject runCtx);

    /**
     * 等级
     * 越小执行越在前,距离原始实现越远
     */
    int level();

    /**
     * 排序号
     * 越小执行越在前,距离原始实现越远
     */
    default int order() {
        return 0;
    }

}
